Análisis Exploratorio (EDA) del OWID Energy Consumption#

Librerías y módulos necesarios#

import pandas as pd 
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
import statsmodels.tsa.api as smtsa
import statsmodels.api as sm
from statsmodels.tsa.stattools import adfuller
from statsmodels.graphics.tsaplots import plot_acf
from statsmodels.graphics.tsaplots import plot_pacf
from statsmodels.tsa.seasonal import seasonal_decompose
from statsmodels.tsa.arima.model import ARIMA
from scipy.ndimage import uniform_filter1d
from multiprocessing import Pool, cpu_count
import matplotlib.pyplot as plt
from matplotlib.ticker import AutoMinorLocator
import plotly.express as px
import pycountry
import plotly.graph_objects as go
from scipy.stats import kruskal

Datos importantes#

Para realizar un Análisis Exploratorio de Datos (EDA) efectivo, debemos seleccionar las variables más relevantes del conjunto de datos para responder a las preguntas clave. Aquí tienes las variables más importantes que pueden ser útiles en un EDA sobre consumo energético, tomando en cuenta la estructura del conjunto de datos:

  1. country: País o región. Es importante para segmentar el análisis por geografía.

  2. year: Año. Fundamental para el análisis temporal de tendencias.

  3. population: Población. Ayuda a entender el consumo per cápita.

Estas variables permiten un análisis profundo de las tendencias de consumo energético, su relación con factores económicos y demográficos, y su impacto en el medio ambiente.

Base de Datos#

df_full = pd.read_csv("C:/Users/ADM/Documents/MachineLearningUN/ML_ProyectoFinal/base/owid-energy-data.csv", sep=",")

Caracteristicas de la Base de Datos#

df_full.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 21812 entries, 0 to 21811
Columns: 129 entries, country to wind_share_energy
dtypes: float64(126), int64(1), object(2)
memory usage: 21.5+ MB

El DataFrame resultante tiene 21,812 entradas y 129 columnas. Cada entrada probablemente representa un año para un país específico, mientras que las columnas parecen incluir diferentes variables relacionadas con el consumo y producción de energía. Las variables contienen 126 columnas de tipo float64 (posiblemente datos numéricos continuos, como el consumo de diferentes tipos de energía), 1 columna de tipo int64 (probablemente algún tipo de identificación o año), y 2 columnas de tipo object (posiblemente nombres de países o categorías).

df_full.describe(include = object)
country iso_code
count 21812 16812
unique 294 220
top Zimbabwe ZWE
freq 124 124

En este paso del análisis de datos, se tomó la decisión de eliminar las filas que contienen valores faltantes (NaN) en las columnas clave: country (país), year (año) y population (población). Estas columnas son esenciales para el análisis, ya que cada observación debe estar asociada a un país, un año específico y su respectiva población. Sin estos valores, el análisis de tendencias temporales, de consumo por país, o de cálculos de consumo per cápita sería inconsistente o incorrecto.

La columna country es indispensable porque los datos se agrupan por países, y eliminar filas sin este dato asegura que cada registro esté correctamente identificado. Asimismo, la columna year es fundamental para garantizar que cada entrada esté asociada a un año específico, necesario para cualquier análisis de series temporales. Finalmente, la columna population es clave para cálculos per cápita o análisis de densidad poblacional en el consumo energético. Por estas razones, eliminar filas con valores faltantes en estas columnas ayuda a mantener la integridad del análisis.

# Eliminamos filas que tengan NaN en las columnas 'country', 'year' o 'population'
df = df_full.dropna(subset=['country', 'year', 'population'])

# Mostramos las primeras filas del DataFrame resultante
df.head(9)
country year iso_code population gdp biofuel_cons_change_pct biofuel_cons_change_twh biofuel_cons_per_capita biofuel_consumption biofuel_elec_per_capita ... solar_share_elec solar_share_energy wind_cons_change_pct wind_cons_change_twh wind_consumption wind_elec_per_capita wind_electricity wind_energy_per_capita wind_share_elec wind_share_energy
24 Afghanistan 1900 AFG 4707744.0 NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
25 Afghanistan 1901 AFG 4751177.0 NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
26 Afghanistan 1902 AFG 4802500.0 NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
27 Afghanistan 1903 AFG 4861833.0 NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
28 Afghanistan 1904 AFG 4921891.0 NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
29 Afghanistan 1905 AFG 4982681.0 NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
30 Afghanistan 1906 AFG 5044212.0 NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
31 Afghanistan 1907 AFG 5106495.0 NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
32 Afghanistan 1908 AFG 5169536.0 NaN NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN

9 rows × 129 columns

Una vez que se eliminaron las filas con valores NaN en estas tres columnas clave, se mostró el resultado utilizando df.head() para visualizar las primeras cinco filas del DataFrame resultante. Este paso es crucial para verificar que los datos se han procesado correctamente y que las filas que permanecen contienen la información necesaria.

df.shape
(18447, 129)

Aqui nos indica que el DataFrame ahora tiene 18,447 filas y 129 columnas. Esto refleja el tamaño del conjunto de datos después de eliminar las filas con valores faltantes en las columnas clave.

Agrupación de datos#

Agrupacion de Energias Renovables y no Renovables#

En este paso, se tomaron las columnas del DataFrame relacionadas con el consumo de energía y se agruparon en dos listas: energías renovables y energías no renovables. Este proceso facilita la manipulación y análisis por separado de ambos tipos de fuentes de energía, lo que es crucial cuando se desean analizar patrones de consumo específicos para cada tipo.

  • ren_energy_columns: Esta lista agrupa todas las columnas relacionadas con el consumo de energías renovables. Las fuentes de energía incluidas aquí, como la biomasa, la energía hidroeléctrica, solar, eólica y nuclear, son aquellas consideradas como fuentes sostenibles a largo plazo. La decisión de agrupar estas columnas permite enfocarse en el análisis de tendencias y comportamientos relacionados con la transición energética hacia fuentes más limpias.

  • nonren_energy_columns: Esta lista contiene las columnas relacionadas con el consumo de energías no renovables, como los combustibles fósiles (carbón, gas natural y petróleo). Estas fuentes son fundamentales para entender las emisiones de gases de efecto invernadero y la dependencia de los combustibles tradicionales, permitiendo así el análisis comparativo con las renovables.

ren_energy_columns = [
    'biofuel_consumption', 
    'hydro_consumption', 
    'solar_consumption', 
    'wind_consumption', 
    'nuclear_consumption', 
    'other_renewable_consumption',
]

nonren_energy_columns = [
    'fossil_fuel_consumption',
    'coal_consumption',
    'gas_consumption',
    'oil_consumption'
]

Agrupar estas columnas en dos categorías permite realizar un análisis más estructurado y facilita la comparación entre el consumo de fuentes renovables y no renovables. Esto es particularmente útil cuando se estudian tendencias de sostenibilidad energética, el impacto de las políticas medioambientales y el progreso hacia una matriz energética más limpia.

Esta separación también ayuda a visualizar y calcular indicadores clave, como la proporción de consumo de energía renovable frente a la no renovable a lo largo del tiempo, lo que es vital para estudios sobre el cambio climático y la eficiencia energética de los países.

Filtro del Conjunto de Datos#

El objetivo de este bloque de código es filtrar el conjunto de datos para enfocarse únicamente en los países individuales y excluir las regiones, continentes y agrupaciones de países. Esto es importante porque el análisis de consumo energético renovable se enfoca en países, y el incluir datos agregados a nivel de regiones como “World” o “Europe” podría distorsionar los resultados al mezclar datos agregados con datos por país.

La decisión de excluir regiones más amplias asegura que el análisis se centre en las comparaciones entre países específicos, lo que es más útil para identificar tendencias o realizar análisis de impacto por nación.

  • Primero, se filtran los datos para el período entre 1990 y 2022, que es el intervalo de tiempo de interés para el análisis. Esto elimina los datos de años fuera de ese rango, que probablemente no sean relevantes o no tengan datos suficientes.

  • Luego, se excluyen agrupaciones geográficas o económicas más amplias como “World”, “Europe”, “Asia”, “North America”, entre otras. Estas agrupaciones suelen sumar los datos de varios países, y al excluirlas se garantiza que el análisis se enfoque exclusivamente en naciones individuales. Las agrupaciones por nivel de ingresos (como “High-income countries”) también se eliminan, ya que podrían interferir con el análisis de países específicos.

  • Se agrupan los datos por país y se suman los valores de todas las energías renovables seleccionadas en la variable ren_energy_columns. Esto permite calcular el consumo total de energías renovables para cada país.

  • Luego, se suman estos valores para cada país y se almacena en una nueva columna llamada total_renewable, que refleja el consumo total de energías renovables por país.

df_filtered_range = df[(df['year'] >= 1990) & (df['year'] <= 2022)]
df_filtered_range = df_filtered_range[(df['country'] != 'World') & 
                (df_filtered_range['country'] != 'Europe') & 
                (df_filtered_range['country'] != 'Asia') & 
                (df_filtered_range['country'] != 'North America') & 
                (df_filtered_range['country'] != 'High-income countries') & 
                (df_filtered_range['country'] != 'Lower-middle-income countries') & 
                (df_filtered_range['country'] != 'Upper-middle-income countries') & 
                (df_filtered_range['country'] != 'European Union (27)') & 
                (df_filtered_range['country'] != 'South America')]
C:\Users\ADM\AppData\Local\Temp\ipykernel_14180\3088417971.py:2: UserWarning: Boolean Series key will be reindexed to match DataFrame index.
  df_filtered_range = df_filtered_range[(df['country'] != 'World') &

Este enfoque asegura que los 10 países más destacados en el consumo de energías renovables se seleccionen sin distorsión, al evitar los datos agregados de regiones y continentes enteros. Además, permite realizar comparaciones claras y significativas entre los países individuales, lo que es crucial para evaluar el progreso hacia el uso de fuentes de energía más limpias a nivel nacional

Detección de Valores Atípicos#

En este código se decide crear un boxplot que muestra la distribución del consumo de energías renovables de los 10 países con mayor consumo de energías renovables en el periodo de 1990 a 2022. La selección de estos países permite un análisis detallado de cómo ha sido el comportamiento del consumo de energías limpias entre los países. Los 10 países seleccionados son los que más consumen energías renovables, lo que los convierte en un grupo clave para estudiar cómo ha evolucionado el uso de estas fuentes limpias.

El boxplot también es útil para detectar outliers (valores atípicos) que pueden representar eventos singulares, como políticas energéticas, cambios tecnológicos, o condiciones económicas que impulsaron o afectaron el consumo de energías renovables en esos países. Además, al agrupar por año, permite visualizar cómo ha cambiado el comportamiento global de consumo en estos países en un período de más de 30 años.

# Sumar energías para cada categoría
df_filtered_range['ren_energy'] = df_filtered_range[ren_energy_columns].sum(axis=1)
df_filtered_range['nonren_energy'] = df_filtered_range[nonren_energy_columns].sum(axis=1)
top10_countries = df_filtered_range.groupby('country')['ren_energy'].sum().nlargest(10).index
df_top10 = df_filtered_range[df_filtered_range['country'].isin(top10_countries)]

# Crear un boxplot por año mostrando la distribución de consumo de energías renovables por país
plt.figure(figsize=(14, 8))
sns.boxplot(data=df_top10, x='year', y='ren_energy', palette='YlOrBr')

plt.title('Distribución del consumo de energías renovables por año (1990 - 2022)')
plt.xlabel('Año')
plt.ylabel('Consumo total de energías renovables (TWh)')

# Mostrar el gráfico
plt.tight_layout()
plt.show()
C:\Users\ADM\AppData\Local\Temp\ipykernel_14180\611516514.py:6: FutureWarning: 

Passing `palette` without assigning `hue` is deprecated and will be removed in v0.14.0. Assign the `x` variable to `hue` and set `legend=False` for the same effect.

  sns.boxplot(data=df_top10, x='year', y='ren_energy', palette='YlOrBr')
_images/e667f25e29c027d03e6ad108e7d189c7629ba133949357eb294cb84bc2e07382.png

El gráfico muestra la distribución anual del consumo de energías renovables de los 10 países con mayor consumo entre 1990 y 2022. La mediana del consumo se mantiene estable en los primeros años, alrededor de 1,000 TWh, pero muestra un ligero aumento hacia años más recientes. Esto indica un crecimiento gradual en el uso de energías renovables.

A partir de 2007, se observa un incremento en la dispersión del consumo de energía, lo que indica una mayor variabilidad entre países. Algunos países han avanzado significativamente más en su adopción de energías renovables que otros, lo que se refleja en el aumento del rango intercuartílico.

Los outliers (valores atípicos) son especialmente visibles a partir de 2010. Estos puntos representan países que han tenido un consumo de energías renovables mucho mayor que el promedio, superando los 7,000-8,000 TWh en los últimos años. Esto podría deberse a políticas energéticas agresivas o avances tecnológicos en dichos países.

Método de Imputación por Modelo ARIMA#

Se implementa un proceso clave para mejorar la calidad del conjunto de datos: la imputación de valores faltantes mediante el modelo ARIMA (AutoRegressive Integrated Moving Average), precedido de la eliminación de valores atípicos. La elección de ARIMA como método de imputación se basa en su capacidad para aprovechar los patrones temporales subyacentes en los datos, proporcionando predicciones más precisas en comparación con métodos como la interpolación lineal.

El método del rango intercuartílico (IQR) sigue siendo esencial para identificar y eliminar los valores atípicos, manteniendo los mismos pasos descritos anteriormente. Una vez eliminados estos valores fuera de los rangos normales (definidos por Q1 y Q3), se procede a imputar los valores faltantes utilizando ARIMA.

El modelo ARIMA, compuesto por tres parámetros: autoregresión (AR), integración (I) y media móvil (MA), se ajusta a los datos históricos de consumo de energías renovables, y predice los valores faltantes basándose en la estructura temporal de los datos previos. Esto permite una imputación que no solo rellena los vacíos, sino que también mantiene las tendencias y patrones observados en el pasado.

ARIMA es preferido en este contexto debido a su capacidad para manejar series temporales complejas y proporcionar una imputación más robusta que preserva la dinámica temporal de los datos.

# 1. Eliminar valores atípicos utilizando el método del IQR
Q1 = df_top10['ren_energy'].quantile(0.25)
Q3 = df_top10['ren_energy'].quantile(0.75)
IQR = Q3 - Q1

# Definir el rango para detectar outliers
lower_bound = Q1 - 0.25 * IQR
upper_bound = Q3 + 0.25 * IQR

# Filtrar datos dentro del rango intercuartílico (eliminar outliers)
df_no_outliers = df_filtered_range[(df_filtered_range['ren_energy'] >= lower_bound) & 
                                   (df_filtered_range['ren_energy'] <= upper_bound)]

# Función para aplicar ARIMA a cada columna de energía
def apply_arima(series):
    # Asegurarse de que no haya valores faltantes en la serie
    series = series.dropna()
    
    # Si hay datos suficientes, aplicamos ARIMA
    if len(series) > 10:  # Esto es para evitar series muy cortas
        model = sm.tsa.ARIMA(series, order=(5,1,0))  # Order ARIMA(p,d,q)
        model_fit = model.fit()  # Aquí quitamos el argumento disp
        forecasted_values = model_fit.predict(start=0, end=len(series)-1, typ='levels')
    else:
        # Si la serie es muy corta, devolvemos los valores originales sin imputar
        forecasted_values = series

    return forecasted_values

# Aplicar ARIMA a cada columna de energías renovables
df_no_outliers[ren_energy_columns] = df_no_outliers[ren_energy_columns].apply(lambda col: apply_arima(col), axis=0)

# Visualizar el boxplot de energías renovables después de la imputación por ARIMA
plt.figure(figsize=(14, 8))
sns.boxplot(data=df_no_outliers, x='year', y='ren_energy', palette='YlOrBr')

plt.title('Consumo de energías renovables por año después de la imputación ARIMA (1990 - 2022)')
plt.xlabel('Año')
plt.ylabel('Consumo total de energías renovables (TWh)')
plt.tight_layout()
plt.show()
C:\Users\ADM\miniconda3\envs\ml_venv\lib\site-packages\statsmodels\tsa\base\tsa_model.py:473: ValueWarning: An unsupported index was provided. As a result, forecasts cannot be generated. To use the model for forecasting, use one of the supported classes of index.
  self._init_dates(dates, freq)
C:\Users\ADM\miniconda3\envs\ml_venv\lib\site-packages\statsmodels\tsa\base\tsa_model.py:473: ValueWarning: An unsupported index was provided. As a result, forecasts cannot be generated. To use the model for forecasting, use one of the supported classes of index.
  self._init_dates(dates, freq)
C:\Users\ADM\miniconda3\envs\ml_venv\lib\site-packages\statsmodels\tsa\base\tsa_model.py:473: ValueWarning: An unsupported index was provided. As a result, forecasts cannot be generated. To use the model for forecasting, use one of the supported classes of index.
  self._init_dates(dates, freq)
C:\Users\ADM\miniconda3\envs\ml_venv\lib\site-packages\statsmodels\tsa\base\tsa_model.py:473: ValueWarning: An unsupported index was provided. As a result, forecasts cannot be generated. To use the model for forecasting, use one of the supported classes of index.
  self._init_dates(dates, freq)
C:\Users\ADM\miniconda3\envs\ml_venv\lib\site-packages\statsmodels\tsa\base\tsa_model.py:473: ValueWarning: An unsupported index was provided. As a result, forecasts cannot be generated. To use the model for forecasting, use one of the supported classes of index.
  self._init_dates(dates, freq)
C:\Users\ADM\miniconda3\envs\ml_venv\lib\site-packages\statsmodels\tsa\base\tsa_model.py:473: ValueWarning: An unsupported index was provided. As a result, forecasts cannot be generated. To use the model for forecasting, use one of the supported classes of index.
  self._init_dates(dates, freq)
C:\Users\ADM\miniconda3\envs\ml_venv\lib\site-packages\statsmodels\tsa\base\tsa_model.py:473: ValueWarning: An unsupported index was provided. As a result, forecasts cannot be generated. To use the model for forecasting, use one of the supported classes of index.
  self._init_dates(dates, freq)
C:\Users\ADM\miniconda3\envs\ml_venv\lib\site-packages\statsmodels\tsa\base\tsa_model.py:473: ValueWarning: An unsupported index was provided. As a result, forecasts cannot be generated. To use the model for forecasting, use one of the supported classes of index.
  self._init_dates(dates, freq)
C:\Users\ADM\miniconda3\envs\ml_venv\lib\site-packages\statsmodels\tsa\base\tsa_model.py:473: ValueWarning: An unsupported index was provided. As a result, forecasts cannot be generated. To use the model for forecasting, use one of the supported classes of index.
  self._init_dates(dates, freq)
C:\Users\ADM\miniconda3\envs\ml_venv\lib\site-packages\statsmodels\tsa\base\tsa_model.py:473: ValueWarning: An unsupported index was provided. As a result, forecasts cannot be generated. To use the model for forecasting, use one of the supported classes of index.
  self._init_dates(dates, freq)
C:\Users\ADM\miniconda3\envs\ml_venv\lib\site-packages\statsmodels\tsa\base\tsa_model.py:473: ValueWarning: An unsupported index was provided. As a result, forecasts cannot be generated. To use the model for forecasting, use one of the supported classes of index.
  self._init_dates(dates, freq)
C:\Users\ADM\miniconda3\envs\ml_venv\lib\site-packages\statsmodels\tsa\base\tsa_model.py:473: ValueWarning: An unsupported index was provided. As a result, forecasts cannot be generated. To use the model for forecasting, use one of the supported classes of index.
  self._init_dates(dates, freq)
C:\Users\ADM\miniconda3\envs\ml_venv\lib\site-packages\statsmodels\tsa\base\tsa_model.py:473: ValueWarning: An unsupported index was provided. As a result, forecasts cannot be generated. To use the model for forecasting, use one of the supported classes of index.
  self._init_dates(dates, freq)
C:\Users\ADM\miniconda3\envs\ml_venv\lib\site-packages\statsmodels\tsa\base\tsa_model.py:473: ValueWarning: An unsupported index was provided. As a result, forecasts cannot be generated. To use the model for forecasting, use one of the supported classes of index.
  self._init_dates(dates, freq)
C:\Users\ADM\miniconda3\envs\ml_venv\lib\site-packages\statsmodels\tsa\base\tsa_model.py:473: ValueWarning: An unsupported index was provided. As a result, forecasts cannot be generated. To use the model for forecasting, use one of the supported classes of index.
  self._init_dates(dates, freq)
C:\Users\ADM\miniconda3\envs\ml_venv\lib\site-packages\statsmodels\tsa\base\tsa_model.py:473: ValueWarning: An unsupported index was provided. As a result, forecasts cannot be generated. To use the model for forecasting, use one of the supported classes of index.
  self._init_dates(dates, freq)
C:\Users\ADM\miniconda3\envs\ml_venv\lib\site-packages\statsmodels\tsa\base\tsa_model.py:473: ValueWarning: An unsupported index was provided. As a result, forecasts cannot be generated. To use the model for forecasting, use one of the supported classes of index.
  self._init_dates(dates, freq)
C:\Users\ADM\miniconda3\envs\ml_venv\lib\site-packages\statsmodels\tsa\base\tsa_model.py:473: ValueWarning: An unsupported index was provided. As a result, forecasts cannot be generated. To use the model for forecasting, use one of the supported classes of index.
  self._init_dates(dates, freq)
C:\Users\ADM\AppData\Local\Temp\ipykernel_14180\765271175.py:31: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
  df_no_outliers[ren_energy_columns] = df_no_outliers[ren_energy_columns].apply(lambda col: apply_arima(col), axis=0)
C:\Users\ADM\AppData\Local\Temp\ipykernel_14180\765271175.py:35: FutureWarning: 

Passing `palette` without assigning `hue` is deprecated and will be removed in v0.14.0. Assign the `x` variable to `hue` and set `legend=False` for the same effect.

  sns.boxplot(data=df_no_outliers, x='year', y='ren_energy', palette='YlOrBr')
_images/4484ed06d25cac2025f63aba36ae68cbcd09a8b32b4de53374878afc69bb4dc9.png

La gráfica muestra la distribución del consumo total de energías renovables por año después de haber realizado la imputación de valores faltantes y la eliminación de outliers usando el método del rango intercuartílico (IQR).

A pesar de la eliminación de outliers, los que permanecen en la gráfica se deben a que algunos países tienen consumos excepcionalmente altos en energías renovables. El método IQR no los eliminó porque, aunque son altos, no exceden el rango de corte definido para ser eliminados como outliers extremos. Estos valores pueden reflejar políticas energéticas exitosas o inversiones significativas en energías renovables, y es importante analizarlos más a fondo en lugar de descartarlos como anomalías.

Aunque la imputación lineal ha rellenado los valores faltantes y se han eliminado muchos outliers, todavía hay países con consumos fuera del rango típico que merecen una atención especial. Estos valores no son errores, sino reflejos de comportamientos o capacidades energéticas excepcionales. El análisis de estos outliers puede ofrecer información valiosa sobre los líderes en energías renovables y las políticas que han impulsado su crecimiento.

# Dibujar la serie temporal original e imputada de manera más clara
plt.figure(figsize=(14, 10))

for i, energy in enumerate(ren_energy_columns, 1):
    plt.subplot(3, 2, i)
    
    # Dibujar la serie original con líneas más suaves y sin marcadores
    plt.plot(df_filtered_range['year'], df_filtered_range[energy], label=f'{energy} - Original', color='blue', alpha=0.7)
    
    # Dibujar la serie después de la imputación ARIMA
    plt.plot(df_no_outliers['year'], df_no_outliers[energy], label=f'{energy} - Imputado ARIMA', color='orange', linestyle='--', alpha=0.8)
    
    # Configuraciones del gráfico
    plt.title(f'Serie de {energy}: Original vs Imputado')
    plt.xlabel('Año')
    plt.ylabel('Consumo (TWh)')
    plt.legend(loc='best')
    plt.grid(True)
    plt.ylim([df_filtered_range[energy].min() - 10, df_filtered_range[energy].max() + 10])  # Ajustar eje Y para visualizar mejor

plt.tight_layout()
plt.show()
_images/a4653008aef2c6f82a004bbbea861edc86b45f75f4824a5882c52b88290ea846.png

Las gráficas muestran una comparación visual entre las series originales y las imputadas para diversas fuentes de energía renovable: biocombustibles, hidroeléctrica, solar, eólica, nuclear y otras fuentes. Cada gráfico presenta dos líneas, una para los datos originales y otra para los datos generados tras la imputación con el modelo ARIMA, lo que permite visualizar cómo los valores faltantes fueron tratados.

En primer lugar, se observa una diferencia notable entre las series originales y las imputadas en varias fuentes de energía, como el biocombustible, la energía nuclear y la solar. En estos casos, los datos imputados no siguen exactamente el patrón original. Esto sugiere que, aunque ARIMA es eficaz en la imputación de valores faltantes, puede no captar picos o caídas abruptas presentes en los datos originales. Por ejemplo, en la gráfica de biocombustibles, los datos imputados muestran una tendencia más estable en comparación con los valores originales, que tienen fluctuaciones más marcadas.

Un aspecto importante es la tendencia de las series imputadas, que generalmente tiende a ser más lineal o plana. Esto se debe a que ARIMA genera predicciones basadas en el comportamiento histórico de la serie, sin capturar del todo las anomalías o eventos extraordinarios que afectaron los valores originales. En energías como la solar y la eólica, que han experimentado un crecimiento pronunciado en los últimos años, los datos imputados no reflejan este incremento de manera adecuada, subestimando el crecimiento real.

Sin embargo, en algunas series, como el consumo de otras energías renovables, las diferencias entre los datos originales e imputados son menores. Esto sugiere que en estas fuentes de energía el modelo ARIMA fue capaz de capturar correctamente la tendencia general de los datos y que los valores faltantes no afectaron drásticamente la precisión de la predicción.

plt.figure(figsize=(14, 10))

for i, energy in enumerate(ren_energy_columns, 1):
    plt.subplot(3, 2, i)
    
    # Histograma de la serie original
    sns.histplot(df_filtered_range['ren_energy'].dropna(), color='blue', kde=True, label='Original', alpha=0.5, bins=30)
    
    # Histograma de la serie imputada
    sns.histplot(df_no_outliers['ren_energy'].dropna(), color='orange', kde=True, label='Imputado', alpha=0.5, bins=30)
    
    plt.title(f'Distribución de {energy}: Original vs Imputado')
    plt.xlabel('Consumo (TWh)')
    plt.ylabel('Frecuencia')
    plt.legend(loc='best')

plt.tight_layout()
plt.show()
_images/1a3c62d7ff053f6152fedf84ca1638d071e79e2ef2dc3a839397e50ebf52e9f6.png

Las gráficas muestran que la imputación por ARIMA ha mantenido, en general, la forma de las distribuciones originales, aunque en ciertos casos, como el biocombustible y la energía nuclear, las distribuciones imputadas son más lisas, lo que podría indicar que se ha reducido la variabilidad en los datos imputados en comparación con los datos originales. Esto es un resultado esperado cuando se utilizan modelos de imputación como ARIMA, que tienden a suavizar los datos para ajustar mejor las series temporales.

import pandas as pd
from scipy.stats import kruskal

# List of energy columns
ren_energy_columns = ['biofuel_consumption', 'hydro_consumption', 'solar_consumption', 
                      'wind_consumption', 'nuclear_consumption', 'other_renewable_consumption']

# Initialize a list to store results
results = {'Energy Type': [], 'Statistic': [], 'P-value': []}

# Perform Kruskal-Wallis test for each energy type
for energy in ren_energy_columns:
    stat, p_value = kruskal(df_filtered_range[energy].dropna(), df_no_outliers[energy].dropna())
    results['Energy Type'].append(energy)
    results['Statistic'].append(stat)
    results['P-value'].append(p_value)

# Create a DataFrame to display the results
df_results = pd.DataFrame(results)

# Display the DataFrame as a table
df_results.style.format({"Statistic": "{:.3f}", "P-value": "{:.3f}"})
  Energy Type Statistic P-value
0 biofuel_consumption 186.958 0.000
1 hydro_consumption 361.683 0.000
2 solar_consumption 179.566 0.000
3 wind_consumption 185.621 0.000
4 nuclear_consumption 712.021 0.000
5 other_renewable_consumption 315.607 0.000

Se muestra la ejecución de la prueba de Kruskal-Wallis, que es una prueba no paramétrica utilizada para evaluar si existen diferencias significativas entre dos o más grupos independientes. En este caso específico, se está utilizando para comparar los datos de consumo de energías renovables antes y después de la imputación de valores faltantes mediante el modelo ARIMA, con el objetivo de verificar si las series imputadas mantienen similitud con las series originales.

El código recorre cada columna de energías renovables, como el consumo de biocombustible, energía hidroeléctrica, energía solar, entre otras. Para cada columna, se aplica la prueba de Kruskal-Wallis entre los datos originales (sin valores faltantes) y los datos después de la imputación realizada por ARIMA. Esta prueba devuelve dos métricas clave: el estadístico de prueba, que indica el grado de diferencia entre las distribuciones, y el valor p, que refleja la significancia estadística de esas diferencias.

En los resultados observamos que para todas las energías renovables evaluadas, el valor p es igual a 0.000. Este valor indica que existe una diferencia estadísticamente significativa entre los datos originales y los imputados. En términos prácticos, esto significa que las series después de la imputación con ARIMA son significativamente distintas de las series originales.

Este resultado es importante porque sugiere que, aunque ARIMA es un modelo robusto para la imputación, los datos generados por el modelo no son exactamente iguales a los originales. El modelo predice valores con base en patrones y tendencias, lo cual puede ajustar bien a las series temporales, pero al mismo tiempo, introduce diferencias notables respecto a los datos faltantes originales. Estas diferencias pueden ser más evidentes cuando las distribuciones originales contenían valores atípicos o variaciones que el modelo ARIMA no logra capturar completamente.

Consumo de Energias Renovables y No Renovables#

Consumo de diferentes fuentes de Energía#

Esto tiene como objetivo visualizar la evolución temporal del consumo de energías renovables y no renovables de manera clara y diferenciada. La decisión de crear dos gráficos en una sola salida permite comparar fácilmente cómo han evolucionado estas dos categorías de energía entre los años 1990 y 2022, facilitando el análisis comparativo entre los dos tipos de fuentes energéticas.

plt.figure(figsize=(14, 10))

plt.subplot(2, 1, 1) 
df_filtered_plot = df_filtered_range[['year'] + ren_energy_columns].groupby('year').sum().reset_index()

for energy in ren_energy_columns:
    plt.plot(df_filtered_plot['year'], df_filtered_plot[energy], label=energy)

plt.title('Consumo de diferentes fuentes de energía renovables (1990 - 2022)')
plt.xlabel('Año')
plt.ylabel('Consumo (TWh)')
plt.legend()
plt.grid(True)

plt.subplot(2, 1, 2)  
df_filtered_plot_nonren = df_filtered_range[['year'] + nonren_energy_columns].groupby('year').sum().reset_index()

for energy in nonren_energy_columns:
    plt.plot(df_filtered_plot_nonren['year'], df_filtered_plot_nonren[energy], label=energy)

plt.title('Consumo de diferentes fuentes de energía no renovables (1990 - 2022)')
plt.xlabel('Año')
plt.ylabel('Consumo (TWh)')
plt.legend()
plt.grid(True)

plt.tight_layout()

plt.show()
_images/da8bbde1c2897753834ee1a6b7d97063db8223f06288a10d128376a400cbe128.png

Esta gráfica muestra dos subgráficas, una para las energías renovables y otra para las energías no renovables, permitiendo observar las tendencias de consumo de diferentes fuentes energéticas entre 1990 y 2022.

Gráfica de energías renovables:#

  • Hidroeléctrica: Es la fuente de energía renovable más utilizada a lo largo de todo el período. Aunque su crecimiento es estable, ha habido una ligera desaceleración a partir de 2010.

  • Nuclear: También representa una gran parte del consumo de energías renovables, pero ha mostrado una tendencia a la baja desde aproximadamente el año 2005.

  • Solar, eólica y biofuel: Estas energías han tenido un crecimiento exponencial, especialmente a partir de 2010. La solar y la eólica muestran un aumento muy marcado, lo que refleja un fuerte avance tecnológico y políticas favorables en las últimas décadas.

  • Otras energías renovables: Presentan un crecimiento más modesto, pero aún relevante.

En resumen, la gráfica refleja el auge de las energías renovables solar y eólica, con una ralentización en las energías nucleares e hidroeléctricas. Esto sugiere un cambio hacia fuentes más modernas de energía renovable.

Gráfica de energías no renovables:#

  • Fósiles: El consumo de combustibles fósiles sigue siendo extremadamente alto, y aunque muestra un crecimiento constante, parece haberse estabilizado o incluso comenzado a disminuir levemente después de 2010. Esto podría ser un indicio de la transición energética hacia fuentes más limpias.

  • Carbón, gas y petróleo: Estas tres fuentes han mostrado un crecimiento moderado hasta el año 2010, después del cual se observa una cierta estabilización o leve descenso, especialmente en el caso del carbón. Sin embargo, el gas natural sigue teniendo un consumo considerable.

En resumen, aunque el consumo de energías no renovables sigue siendo alto, se observa una ligera estabilización o disminución en los últimos años. Esto puede estar relacionado con políticas de descarbonización y el aumento de las energías renovables.

Las energías renovables (particularmente la solar y eólica) han crecido de manera significativa, mientras que las fuentes tradicionales de energía renovable (como la hidroeléctrica y la nuclear) muestran una tendencia más estable o a la baja. Por otro lado, aunque las energías no renovables siguen dominando el consumo energético global, el gráfico sugiere una posible transición hacia fuentes más limpias, reflejada en la estabilización o leve disminución de su consumo en la última década.

Esto indica un cambio progresivo hacia una matriz energética más sostenible, con las energías renovables ganando terreno frente a las no renovables.

Consumo Total de ambas fuentes de Energía#

Esto tiene como objetivo visualizar las sumas anuales del consumo total de energías renovables y no renovables a través de gráficos de barras con etiquetas de valores encima de cada barra. La decisión de representar estos datos de esta manera busca proporcionar una visualización clara y directa que permita observar las diferencias y la evolución en el tiempo entre ambos tipos de energía, facilitando la interpretación del crecimiento o decrecimiento en el consumo.

df_total_energy_per_year = df_filtered_range.groupby('year')[['ren_energy', 'nonren_energy']].sum().reset_index()
plt.figure(figsize=(10, 8))

def plot_bars(ax, data, color, title, y_label):
    bars = ax.bar(data['year'], data['value'], color=color, width=0.8)
    for bar in bars:
        yval = bar.get_height()
        ax.text(bar.get_x() + bar.get_width() / 2, yval + 0.05 * yval, f'{round(yval/1000, 1)}K', ha='center', va='bottom', rotation=90)
    ax.set_title(title)
    ax.set_xlabel('Año')
    ax.set_ylabel(y_label)
    ax.grid(axis='y', linestyle='--', linewidth=0.7)
    ax.set_ylim(0, yval + yval * 0.35)

plt.subplot(2, 1, 1)
plot_bars(plt.gca(), df_total_energy_per_year.rename(columns={'ren_energy': 'value'}), '#90EE90', 'Suma total de fuentes de energía renovable (1990 - 2022)', 'Consumo Total (TWh)')

plt.subplot(2, 1, 2)
plot_bars(plt.gca(), df_total_energy_per_year.rename(columns={'nonren_energy': 'value'}), '#FFA07A', 'Suma total de fuentes de energía no renovable (1990 - 2022)', 'Consumo Total (TWh)')

plt.tight_layout()

plt.show()
_images/34c15f0bb6b7e8c9970521188a3aae077d514033b4c86efdd8c68269688bf9f9.png

Esta gráfica muestra dos subgráficas que comparan la suma total de fuentes de energía renovable y no renovable en el período entre 1990 y 2022. Las barras de cada gráfico incluyen etiquetas con los valores anuales en teravatios-hora (TWh) para una interpretación numérica directa.

  • La gráfica refleja dos tendencias distintas: mientras que las energías renovables muestran un crecimiento acelerado, las energías no renovables han mantenido un alto nivel de consumo con una leve estabilización en los últimos años.

  • Esto indica un progreso hacia la transición energética, donde las fuentes renovables están ganando terreno, aunque las fuentes no renovables siguen dominando el consumo energético mundial.

  • El crecimiento reciente de las energías renovables sugiere que los esfuerzos por reducir la dependencia de los combustibles fósiles están comenzando a tener un impacto notable, aunque aún se requiere un cambio más drástico para desplazar completamente a las fuentes no renovables.

Si bien el uso de energías renovables ha aumentado significativamente, la gráfica muestra que todavía existe una gran brecha entre el consumo de fuentes renovables y no renovables, lo que subraya la magnitud del desafío que enfrenta el mundo en términos de transición energética.

Representar los datos mediante gráficas de pastel tiene como objetivo proporcionar una visión clara y sencilla de la distribución porcentual del consumo de diferentes fuentes de energía renovable y no renovable. Este tipo de gráfico permite visualizar de forma directa qué fuentes de energía dominan el consumo total en el período de 1990 a 2022, facilitando una rápida comparación entre las diferentes categorías de energía.

df_renewable_total = df_filtered_range[ren_energy_columns].sum()
df_nonrenewable_total = df_filtered_range[nonren_energy_columns].sum()

plt.figure(figsize=(14, 7))

plt.subplot(1, 2, 1)
plt.pie(df_renewable_total, autopct='%1.1f%%', startangle=90, 
        colors=['#ff9999','#66b3ff','#99ff99','#ffcc99','#c2c2f0','#ffb3e6'])
plt.title('Porcentaje del consumo total de energías renovables (1990 - 2022)')
plt.axis('equal')  
plt.legend(ren_energy_columns, loc="best", bbox_to_anchor=(1, 0, 0.5, 1))  

plt.subplot(1, 2, 2)
plt.pie(df_nonrenewable_total, autopct='%1.1f%%', startangle=90, 
        colors=['#ff6666', '#ffcc66', '#66ff66', '#66ccff'])
plt.title('Porcentaje del consumo total de energías no renovables (1990 - 2022)')
plt.axis('equal')  
plt.legend(nonren_energy_columns, loc="best", bbox_to_anchor=(1, 0, 0.5, 1)) 

plt.tight_layout()

plt.show()
_images/77bed483c845e5754c873b8467b52c9c79a5a1ec91c74c67a4eecf91aaaf6e77.png

Estas gráficas proporcionan una visión clara de cómo se distribuye el consumo de energía entre las distintas fuentes, tanto renovables como no renovables. Se puede observar que, aunque las energías renovables están ganando relevancia, las fuentes no renovables (especialmente los combustibles fósiles) aún constituyen una parte importante de la producción energética global. Las energías hidroeléctrica y nuclear dominan dentro de las renovables, mientras que los combustibles fósiles siguen siendo la principal fuente de energía no renovable.

Consumo de Energía por paises#

Consumo de Energía en el mundo#

El uso de un mapa coroplético para representar el consumo total de energías renovables por país tiene como objetivo proporcionar una visualización geoespacial que permite identificar visualmente qué regiones del mundo están contribuyendo más al consumo de energías limpias. Esta decisión se tomó para hacer evidente la distribución desigual de la adopción de energías renovables, donde algunos países son líderes y otros aún tienen un consumo bajo.

df_renewable_consumption = df_filtered_range.groupby('country')[ren_energy_columns].sum().reset_index()

df_renewable_consumption['total_renewable'] = df_renewable_consumption[ren_energy_columns].sum(axis=1)

# Configuración para ocultar barra de herramientas
config = {'showLink': False, 'displayModeBar': False}

# Crear el mapa de coropletas con plotly
fig = px.choropleth(
    df_renewable_consumption,
    locations="country",  # Columna con los nombres de los países
    locationmode="country names",  # Especifica que los nombres corresponden a países
    color="total_renewable",  # Columna con los valores a colorear
    hover_name="country",  # Columna que se mostrará al pasar el mouse
    title="Consumo total de energías renovables por país (1990 - 2022)",  # Título del mapa
    color_continuous_scale=px.colors.sequential.YlGnBu,  # Escala de colores
    range_color=(0, 150000)  # Rango de los colores
)

# Actualizar el diseño
fig.update_layout(
    title_text='Consumo total de energías renovables por país (1990 - 2022)',
    geo=dict(showcoastlines=True, coastlinecolor="Black", showland=True, landcolor="white"),
    coloraxis_colorbar=dict(title="Consumo Total de Energía (TWh)")
)

# Mostrar el mapa
fig.show(config=config)
  • Los países con los colores más oscuros, como Estados Unidos y China, son los principales consumidores de energías renovables, reflejando su gran tamaño, capacidad industrial, y políticas enfocadas a la transición energética.

  • Canadá, también con un color oscuro, es otro actor importante en el consumo de energías renovables, gracias a su vasta capacidad hidroeléctrica.

  • Países en América Latina, África, y partes de Asia muestran colores más claros, lo que indica un menor consumo de energías renovables. Esto puede estar relacionado con limitaciones económicas, tecnológicas o de infraestructura que dificultan la adopción de estas fuentes de energía.

  • Europa aparece en tonos más claros en general, lo que podría reflejar que, aunque muchos países europeos están avanzando en la adopción de energías renovables, su tamaño y demanda energética total es menor comparado con países como China o EE. UU.

  • Este mapa resalta las disparidades globales en el consumo de energías renovables. Si bien algunos países están avanzando rápidamente hacia una mayor adopción de fuentes limpias, muchos otros todavía dependen de fuentes no renovables o no han logrado desarrollar suficiente capacidad renovable.

  • La representación geoespacial es una herramienta poderosa para visualizar las diferencias regionales y ayuda a identificar áreas donde es necesario un mayor enfoque en políticas de energía limpia para promover una adopción más equitativa a nivel mundial.

En resumen, esta gráfica facilita la interpretación global del consumo de energías renovables, destacando a los principales actores y mostrando las regiones que podrían beneficiarse de mayores inversiones en infraestructura energética sostenible.

Representación de los 10 países que mas consumen energía renovable#

Para representar a los 10 países con mayor consumo de energías renovables permite una comparación clara y visual de los valores de consumo acumulado entre los países. Al ordenar las barras de mayor a menor, se facilita la interpretación inmediata de quiénes son los principales consumidores de energías renovables, destacando las diferencias entre cada país.

Este tipo de gráfico es eficaz para mostrar datos ordenados y para resaltar el valor absoluto del consumo en cada país, lo que lo hace perfecto para observar tendencias a largo plazo como en este caso, que abarca el consumo desde 1990 hasta 2022.

df_top10_renewable = df_renewable_consumption.sort_values(by='total_renewable', ascending=False).head(10)

# Crear la gráfica de barras
plt.figure(figsize=(10, 6))
plt.barh(df_top10_renewable['country'], df_top10_renewable['total_renewable'], color='orange')

# Añadir etiquetas y títulos
for index, value in enumerate(df_top10_renewable['total_renewable']):
    plt.text(value, index, f'{value:.2f} TWh')

plt.title('Top 10 países con mayor consumo de energías renovables (1990 - 2022)')
plt.xlabel('Consumo Total de Energía (TWh)')
plt.ylabel('País')

# Mostrar la gráfica
plt.tight_layout()
plt.show()
_images/25bd4516e01c0a595c6a2993ceb65fb4ca0b0534c9505408ac06d092cf6e9210.png

Este gráfico muestra claramente que, aunque Estados Unidos y China dominan el consumo de energías renovables a nivel mundial, otros países como Francia, Canadá, y Brasil también desempeñan un papel importante en la transición hacia fuentes de energía más limpias. La distribución de los colores refuerza visualmente estas diferencias y facilita una interpretación clara del consumo total de cada país.

En resumen, esta visualización destaca la distribución desigual del consumo de energías renovables entre los países, lo que refleja tanto el tamaño económico de cada nación como sus políticas energéticas específicas, y permite una fácil identificación de los líderes globales en la adopción de energías limpias.

Evolución del porcentaje de energías renovables#

Promedio Porcentual - Energias Renovables vs No Renovables#

El porcentaje de consumo de energías renovables frente a no renovables a lo largo del tiempo (1990 - 2022) tiene el propósito de visualizar la evolución relativa de las energías renovables en comparación con el consumo total. Este enfoque permite observar cómo ha crecido (o disminuido) el peso de las energías renovables en el consumo energético global, lo que es crucial para medir el progreso hacia una transición energética más sostenible.

El gráfico de línea es ideal para este tipo de análisis temporal, ya que muestra claramente las tendencias a lo largo del tiempo y permite identificar momentos clave de crecimiento o estancamiento en la adopción de energías renovables.

df_annual_consumption = df_filtered_range.groupby('year')[ren_energy_columns + nonren_energy_columns].sum().reset_index()

df_annual_consumption['total_renewable'] = df_annual_consumption[ren_energy_columns].sum(axis=1)
df_annual_consumption['total_nonrenewable'] = df_annual_consumption[nonren_energy_columns].sum(axis=1)

df_annual_consumption['percentage_renewable'] = (df_annual_consumption['total_renewable'] / 
                                                 (df_annual_consumption['total_renewable'] + df_annual_consumption['total_nonrenewable'])) * 100

fig = px.line(df_annual_consumption, 
              x='year', 
              y='percentage_renewable', 
              title='Porcentaje de consumo de energías renovables vs no renovables (1990 - 2022)',
              labels={'percentage_renewable': 'Porcentaje de Energías Renovables (%)', 'year': 'Año'},
              markers=True)

fig.update_traces(texttemplate='%{y:.1f}%', textposition="top right")

fig.show()

Se calcula el consumo total anual tanto de energías renovables como de no renovables. Luego, se utiliza esta información para calcular el porcentaje que representa el consumo de energías renovables sobre el consumo total (renovable + no renovable) cada año.

El incremento más marcado ocurre en los últimos cinco años, lo que indica un progreso considerable en la adopción de energías limpias a nivel global. Sin embargo, aunque el crecimiento es notable, el porcentaje sigue siendo relativamente bajo en comparación con el total de consumo, lo que señala la necesidad de mayores esfuerzos en la transición hacia un consumo más sostenible.

Este gráfico de línea muestra claramente cómo el porcentaje de energías renovables ha fluctuado a lo largo de los años, con un estancamiento en la década de 2000 y un crecimiento acelerado en la última década. Esto es un reflejo de cómo las políticas energéticas, los avances tecnológicos, y las demandas de sostenibilidad están impulsando el incremento en la adopción de energías renovables.

Consumo de Energías Renovables por medio de un Mapa de Calor#

Con esto ofrece una visión comparativa de qué fuentes de energía predominan en distintos países, así como identificar el volumen relativo de consumo entre las diferentes fuentes y países. Este tipo de gráfico es ideal para visualizar matrices de datos donde cada celda contiene un valor numérico, ya que permite observar de manera intuitiva los valores más altos y más bajos a través de una escala de color.

plt.figure(figsize=(8, 8))
ax = sns.heatmap(df_top10_renewable.set_index('country')[ren_energy_columns], 
                 annot=True, fmt='.0f', cmap='YlOrBr', linewidths=.5, cbar_kws={'label': 'Consumo de energía (TWh)'})

plt.title('Consumo de energías renovables por país (1990 - 2022)')
plt.xlabel('Tipos de energía')
plt.ylabel('País')

plt.tight_layout()
plt.show()
_images/abfbfe9080caaf54124f1eda4f93a0df4bdb4b1f85233e4704dfee8a559ce4c8.png

Permite una rápida comparación entre los países en cuanto a su consumo de distintos tipos de energías renovables. Ayuda a identificar patrones regionales y resalta la heterogeneidad en el uso de fuentes renovables, desde países con una fuerte dependencia en hidroenergía, como Brasil y China, hasta aquellos con un predominio nuclear, como Estados Unidos y Francia.

Conclusiones#

El consumo de energías renovables ha mostrado un crecimiento sostenido desde 1990, especialmente en fuentes como la energía solar, eólica e hidroeléctrica. Este aumento refleja los esfuerzos de muchos países por diversificar sus matrices energéticas y reducir su dependencia de combustibles fósiles, en respuesta tanto a factores económicos como a las presiones derivadas del cambio climático.

A pesar del crecimiento global, existe una disparidad significativa en el uso de fuentes renovables entre los diferentes países. Mientras que algunos países como Estados Unidos, China, y Brasil lideran el consumo total, otros dependen principalmente de una o dos fuentes específicas, como la energía nuclear en Francia y la hidroenergía en Canadá y Suecia. Aunque el consumo de energías renovables ha crecido, la proporción del consumo renovable frente al consumo no renovable todavía sigue siendo baja.

El análisis muestra que aunque se han hecho avances importantes en la adopción de energías renovables a nivel mundial, la dependencia de los combustibles fósiles sigue siendo alta. Para lograr los objetivos climáticos internacionales, será crucial acelerar la transición energética, incrementar la inversión en tecnologías limpias y asegurar una distribución más equitativa de las fuentes renovables a nivel global.